﻿Imports System.Data.OleDb
Imports System.Xml
Imports System.Text
Imports System.Data.SqlServerCe

Public Class PersonalController

    Private cripto As New CriptoTripleDES("AG30GZKCEC5j5TD")


    Private personalService As New PersonalService()


    Private Function getDocumentPersonal(ByVal archivoEntrada As String) As XmlDocument
        'Desde archiv normal
        'Return XmlUtil.getDocument(archivoEntrada, True);

        'Desde archivo encriptado
        Dim dataEncriptada As String = ArchivoUtil.getArchivoComoTexto(archivoEntrada)
        Dim data = cripto.decrypt(dataEncriptada)
        Return XmlUtil.getDocumentFromData(data)
    End Function

    Public Function crearMDB(ByVal archivoEntrada As String, ByVal archivoSalida As String, ByVal mostrarResultado As Boolean) As Boolean
        Dim con As OleDbConnection = Nothing
        Try
            con = MdbUtil.getConnection(archivoSalida, True, "enahouser")

            Dim cmd As New OleDbCommand()
            cmd.Connection = con
            con.Open()

            personalService.crearTablaPersonal(cmd)

            Dim doc As XmlDocument = getDocumentPersonal(archivoEntrada)
            personalService.iterarPersonal(doc, New InsertSqlPersonalCommand(cmd))

            If (mostrarResultado) Then
                MsgBox("RESULTADO:" & Chr(13) & "Archivo '" & archivoSalida & "' fue creado")
            End If

            Return True
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If Not IsNothing(con) Then
                con.Close()
            End If
        End Try

        Return False
    End Function

    Public Function crearDAT(ByVal archivoEntrada As String, ByVal archivoSalida As String, ByVal mostrarResultado As Boolean) As Boolean
        'ShellUtil.shellEsperando("dcf2xml\dcf2xml.exe dict/Personal.dcf out/Personal.xml")
        Dim dictDcf As String = "dict/Personal.dcf"
        Dim dictXml As String = "Personal.dcf.xml"
        ArchivoUtil.eliminarSiExiste(dictXml)
        SistemaUtil.llamarComando("dcf2xml\dcf2xml.exe", dictDcf & " " & dictXml)
        'ArchivoUtil.testExiste(dictXml)

        Dim doc As XmlDocument = getDocumentPersonal(archivoEntrada)
        Dim docDict As XmlDocument = XmlUtil.getDocument(dictXml, True)
        Dim sb As New StringBuilder()
        Dim comando As New InsertDatPersonalCommand(sb, docDict)
        personalService.iterarPersonal(doc, comando)
        'sb.AppendLine("") 'agregando una linea en blanco al final
        ArchivoUtil.escribirArchivo(archivoSalida, sb)
        ArchivoUtil.eliminarSiExiste(dictXml)

        If (mostrarResultado) Then
            MsgBox("RESULTADO:" & Chr(13) & "Archivo '" & archivoSalida & "' fue creado.")

            Dim listaTruncados As List(Of Mensaje) = comando.getTruncados()
            If listaTruncados.Count > 0 Then
                'Form2.data.DataSource = listaTruncados
                For Each m In listaTruncados
                    Dim fila As String() = New String() {m.linea, m.descripcion}
                    Form2.data.Rows.Add(fila)
                Next

                Dim rutaDict As String = SistemaUtil.getRutaAplicacion() & dictDcf
                Form2.txtDCF.Text = rutaDict
                Form2.Show()
            End If
        End If

        Return True

    End Function

    Public Function crearSDF(ByVal archivoEntrada As String, ByVal archivoSalida As String, ByVal mostrarResultado As Boolean) As Boolean
        Dim con = SqlCEUtil.getConnection(archivoSalida, True, "enahouser")

        Try
            Dim cmd As New SqlCeCommand()
            cmd.Connection = con
            con.Open()

            personalService.crearTablaPersonal(cmd)
            personalService.crearTablaCargo(cmd)
            personalService.crearTablaOdei(cmd)

            Dim doc As XmlDocument = getDocumentPersonal(archivoEntrada)
            personalService.iterarPersonal(doc, New InsertSqlPersonalCommand(cmd))
            personalService.insertarTablaCargo(doc, cmd)
            personalService.insertarTablaOdei(doc, cmd)

            If (mostrarResultado) Then
                MsgBox("RESULTADO:" & Chr(13) & "Archivo '" & archivoSalida & "' fue creado")
            End If

            Return True
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            con.Close()
        End Try

        Return False

    End Function
End Class
